#!/bin/bash

# 多端口释放脚本
# 简单直接，支持多个端口

# 颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'

# 如果没有参数，使用默认端口
if [[ $# -eq 0 ]]; then
    PORTS=(3003)
else
    PORTS=("$@")
fi

echo -e "${BLUE}准备释放以下端口: ${PORTS[*]}${NC}"
echo ""

# 释放每个端口
for port in "${PORTS[@]}"; do
    echo "=========================================="
    echo -e "${BLUE}释放端口: $port${NC}"
    
    # 检查端口占用
    if command -v lsof &> /dev/null; then
        PIDS=$(lsof -ti :$port 2>/dev/null || true)
        if [[ -n "$PIDS" ]]; then
            echo "发现进程: $PIDS"
            
            # 杀死进程
            for PID in $PIDS; do
                echo "杀死进程 $PID..."
                if kill -9 "$PID" 2>/dev/null; then
                    echo -e "${GREEN}✓ 成功${NC}"
                else
                    echo -e "${RED}✗ 失败${NC}"
                fi
            done
            
            # 验证
            sleep 1
            if lsof -i :$port &>/dev/null; then
                echo -e "${RED}端口 $port 仍然被占用${NC}"
            else
                echo -e "${GREEN}端口 $port 已释放${NC}"
            fi
        else
            echo -e "${GREEN}端口 $port 未被占用${NC}"
        fi
    else
        # 使用fuser
        if command -v fuser &> /dev/null; then
            if fuser $port/tcp &>/dev/null; then
                echo "发现进程，正在杀死..."
                if fuser -k $port/tcp; then
                    echo -e "${GREEN}端口 $port 已释放${NC}"
                else
                    echo -e "${RED}无法释放端口 $port${NC}"
                fi
            else
                echo -e "${GREEN}端口 $port 未被占用${NC}"
            fi
        else
            echo -e "${RED}未找到lsof或fuser命令${NC}"
        fi
    fi
    
    echo ""
done

echo "=========================================="
echo -e "${BLUE}端口释放完成！${NC}"
